package com.jdzy.student.controller;

import com.jdzy.common.exception.JdzuException;
import com.jdzy.model.common.vos.Result;
import com.jdzy.model.common.vos.ResultA;
import com.jdzy.model.common.vos.ResultCodeEnum;
import com.jdzy.model.student.dtos.PlanQueryDto;
import com.jdzy.model.student.pojos.PlanType;
import com.jdzy.model.student.vos.PlanSubmitVo;
import com.jdzy.student.service.PlanService;
import io.swagger.annotations.Api;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;


@RestController
@CrossOrigin(allowCredentials ="true",origins = "*",allowedHeaders = "*")
@Slf4j
@RequestMapping("api/plan")
@Api(value = "计划的controller类")
@RequiredArgsConstructor

public class PlanController {
    private final PlanService planService;

    @Value("${spring.mail.username}")
    private String from;
    /**
     * 查询计划信息
     * @param
     * @return
     */
    @GetMapping("getPlanInfo")
    public ResultA<List<PlanQueryDto>> getPlanInfo(@RequestParam(name = "stuId") String stuId,
                                                   @RequestParam(name = "planType") PlanType planType,
                                                   @RequestParam(name = "startTime") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date startTime,
                                                   @RequestParam(name = "endTime") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date endTime) {
        // 根据学号、计划类型和时间范围查询数据库
        return planService.findPlansByStudentIdAndTypeAndTime(stuId, planType, startTime, endTime);
    }

    /**
     * 新增或修改计划信息
     *
     * @param planSubmitVo
     * @return
     */
    @PostMapping("saveOrUpdate")
    public ResultA saveOrUpdate(@RequestBody PlanSubmitVo planSubmitVo) {
    // 保存计划信息到数据库
        planService.saveOrUpdatePlan(planSubmitVo);
        return ResultA.ok();
    }



    /**
     * 删除计划信息
     */
    @DeleteMapping("deletePlan")
    public ResultA deletePlan(@RequestParam(name = "id") Long id) {
    // 删除计划信息到数据库
        planService.removeById(id);
        return ResultA.ok();
    }
    /**
     * 计划签到功能
     * @param stuId 学生ID
     * @param planId 计划ID
     * @return 签到结果
     */
    @PostMapping("/planSign/{stuId}/{planId}")
    public ResultA planSign(@PathVariable("stuId") String stuId,
                            @PathVariable("planId") Long planId) {
        // 调用服务层处理签到逻辑
        boolean signResult = planService.signPlan(stuId, planId);
        if (signResult) {
            return ResultA.ok("签到成功");
        } else {
            return ResultA.fail(201,"签到失败");
        }
    }

    /**
     * 获取学生全部的签到记录
     * @param stuId 学生ID
     * @return 签到日期列表
     */
    @GetMapping("getSignDates")
    public ResultA<List<String>> getSignDates(@RequestParam(name = "stuId") String stuId) {
        List<String> signDates = planService.getSignDates(stuId);
        return ResultA.ok(signDates);
    }


    /**
     * 导出计划功能
     */
    @GetMapping(value = "/exportData")
    public void exportData(HttpServletResponse response) {
        planService.exportData(response);
    }

    /**
     * 不带附件发送邮件
     * addressee 收件人邮箱
     * subject 邮件标题
     * content 邮件内容
     * @return ResultVO
     * 此处需要进行逻辑判断，查询签到表，如果未签到就发送提醒
     */

    @GetMapping("/sendReminderEmails")
    public Result sendReminderEmails() {
        planService.sendReminderEmails();
        return Result.success("邮件发送任务已触发");
    }
//    @PostMapping("/send")
//    public Result sendEmail(@RequestBody MailDto mail) throws AddressException {
//        //判断文件格式是否正确
//        //获取收件人邮箱
//        String addressee = mail.getAddressee();
//        if(!addressee.contains("@qq.com")){
//            return Result.error("邮箱格式错误");
//        }
//
//        // 获取当前日期，并格式化为字符串
//        LocalDate today = LocalDate.now();
//        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); // 格式化为你需要的格式，例如"yyyyMMdd"
//        String formattedDate = today.format(formatter);
//
//        mail.setSubject(mailConfig.getSubject());
//        mail.setContent(mailConfig.getContentPrefix()+formattedDate+mailConfig.getContentSuffix());
//
//        SimpleMailMessage mailMessage = new SimpleMailMessage();
//        // 发件人邮箱,与配置文件中保持一致,所以直接从配置文件绑定过来了
//        mailMessage.setFrom(String.valueOf(new InternetAddress("生也有涯" + "<" + from + ">")));
//        // 收件人
//        mailMessage.setTo(mail.getAddressee());
//        // 标题
//        mailMessage.setSubject(mail.getSubject());
//        // 内容, 第一个参数为邮箱内容, 第二个参数为是否启用html格式,
//        // 如果开启, 那么第一个参数如果有html标签, 会自动识别, 邮件样式更好看
//        mailMessage.setText(mail.getContent());
//        javaMailSender.send(mailMessage);
//        //返回
//        return Result.success();
//    }

    @GetMapping("/getDate")
    public Result imgCode(){
        // 获取今天的日期
        LocalDate today = LocalDate.now();

        // 格式化日期为字符串
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        String formattedDate = today.format(formatter);

        // 返回结果
        return Result.success(formattedDate);
    }

}




